/*
	Copyright (c) 2010 <copyright holders>
	This source code is licensed under The MIT License,
	see the file LICENSE for details.
	*/

#ifndef MENUPRESENTATION_HPP
#define MENUPRESENTATION_HPP

#include <boost/scoped_ptr.hpp>
#include <cassert>

#include "ForwardDecls.hpp"
#include "Presentation.hpp"

namespace spelprog2 {
namespace presentation {

class MenuPresentation : public Presentation {
    const std::string mapName_;
    Ogre::TerrainSceneManager * sceneMan_;
    boost::scoped_ptr<gui::MenuGUI> gui_;
    boost::scoped_ptr<CameraMan> cameraMan_;
public:
    MenuPresentation(Game & game, const std::string & mapName);
    virtual ~MenuPresentation();

    virtual void initScene();
    virtual void initCameraManager();
    virtual void initGUI();
    virtual Ogre::SceneManager & getSceneManager() { assert(sceneMan_); return (Ogre::SceneManager &) *sceneMan_; }
    virtual CameraMan & getCameraManager() { assert(cameraMan_); return * cameraMan_; }
    virtual void registerNetListeners();
    virtual void unregisterNetListeners();

    virtual void update(float deltaTime) { }

    virtual void keyPressed(const OIS::KeyEvent & ev);
	virtual void keyReleased(const OIS::KeyEvent & ev);

    virtual void mouseMoved(const Ogre::Vector2 & point, const Ogre::Vector2 & normalizedPoint,
        const OIS::MouseEvent & ev);
    virtual void mousePressed(const Ogre::Vector2 & point, const Ogre::Vector2 & normalizedPoint,
        const OIS::MouseEvent & ev, OIS::MouseButtonID id);
    virtual void mouseReleased(const Ogre::Vector2 & point, const Ogre::Vector2 & normalizedPoint,
        const OIS::MouseEvent & ev, OIS::MouseButtonID id);
};

}; //presentation
}; //spelprog2

#endif //MENUPRESENTATION_HPP
